PHP 8 এ Property Promotion ফিচারটি একটি নতুন সুবিধা যা ক্লাসের কনস্ট্রাক্টর ডিফাইন করার সময় প্যারামিটারগুলিকে সরাসরি ক্লাস প্রোপার্টি হিসেবে প্রচার (promote) করতে সাহায্য করে। এর মাধ্যমে, কনস্ট্রাক্টরের ভিতরে ক্লাস প্রোপার্টি ডিফাইন করা এবং তাদের মান নির্ধারণ করা আরও সহজ এবং সংক্ষিপ্ত হয়ে ওঠে।
Property Promotion এর Syntax
PHP 8 এ Property Promotion এর মাধ্যমে, আপনি কনস্ট্রাক্টরের প্যারামিটারগুলিকে ক্লাস প্রোপার্টি হিসেবে স্বয়ংক্রিয়ভাবে ঘোষণা করতে পারেন, এবং এর জন্য আলাদাভাবে প্রোপার্টি ডিক্লেয়ার করার প্রয়োজন হয় না। কনস্ট্রাক্টর প্যারামিটারগুলোর সাথে প্রোপার্টি প্রমোট করার জন্য, আপনি কনস্ট্রাক্টরের প্যারামিটারগুলির আগে টাইপ ডিক্ল্যারেশন (যেমন public, private, protected) ব্যবহার করতে পারেন।
Syntax:
class ClassName
{
public function __construct(
public string $name,
public int $age
) {
// Constructor body
}
}এখানে, name এবং age প্যারামিটারগুলো সরাসরি ক্লাস প্রোপার্টি হিসেবে প্রচারিত হচ্ছে, এবং আপনি কনস্ট্রাক্টরকে আরও সংক্ষিপ্তভাবে ডিফাইন করতে পারছেন।
Property Promotion এর উদাহরণ
1. Basic Property Promotion Example:
<?php
class Person
{
// Constructor parameters are promoted to class properties
public function __construct(
public string $name,
public int $age
) {
// Constructor body can still be used to initialize other properties if needed
}
}
// Creating an instance of the Person class
$person = new Person("John Doe", 30);
// Accessing the properties
echo $person->name; // Output: John Doe
echo $person->age; // Output: 30
?>এখানে name এবং age প্যারামিটারগুলো সরাসরি ক্লাস প্রোপার্টি হিসেবে প্রচারিত হচ্ছে। আপনি কনস্ট্রাক্টর কলের সময় এগুলোর মান প্রদান করেন এবং পরে ক্লাসের প্রোপার্টি হিসেবে সেগুলি ব্যবহার করতে পারেন।
2. Property Promotion with Different Access Modifiers:
<?php
class Employee
{
// Constructor parameters with different access modifiers
public function __construct(
public string $name,
private string $position,
protected int $salary
) {}
public function getDetails()
{
return "Name: $this->name, Position: $this->position, Salary: $this->salary";
}
}
// Creating an instance of Employee class
$employee = new Employee("Alice", "Developer", 50000);
// Accessing the public property directly
echo $employee->name; // Output: Alice
// Private and protected properties cannot be accessed directly
// echo $employee->position; // Error
// echo $employee->salary; // Error
// Using a public method to access private/protected properties
echo $employee->getDetails(); // Output: Name: Alice, Position: Developer, Salary: 50000
?>এখানে, name, position, এবং salary প্যারামিটারগুলো ভিন্ন ভিন্ন অ্যাক্সেস মডিফায়ারের সাথে ক্লাস প্রোপার্টি হিসেবে প্রচারিত হয়েছে। name public হওয়ায় এটি সরাসরি অ্যাক্সেস করা সম্ভব, তবে position (private) এবং salary (protected) সরাসরি অ্যাক্সেস করা যাবে না।
3. Constructor with Default Values and Property Promotion:
<?php
class Car
{
// Constructor parameters with default values
public function __construct(
public string $make = "Toyota",
public string $model = "Corolla",
public int $year = 2020
) {}
public function getDetails()
{
return "Car: $this->make $this->model, Year: $this->year";
}
}
// Creating an instance of Car class with default values
$car1 = new Car();
echo $car1->getDetails(); // Output: Car: Toyota Corolla, Year: 2020
// Creating an instance with custom values
$car2 = new Car("Honda", "Civic", 2021);
echo $car2->getDetails(); // Output: Car: Honda Civic, Year: 2021
?>এখানে, Car ক্লাসের কনস্ট্রাক্টর প্যারামিটারগুলোর জন্য ডিফল্ট মান নির্ধারণ করা হয়েছে, তাই যখন প্যারামিটার না দেওয়া হয়, তখন ডিফল্ট মান ব্যবহার হবে। কনস্ট্রাক্টরের মাধ্যমে সহজে প্রোপার্টি প্রচার এবং ডিফল্ট মান নির্ধারণ করা হয়েছে।
Property Promotion এর সুবিধা:
- সংক্ষিপ্ত কোড: আপনি কনস্ট্রাক্টর প্যারামিটারগুলোকে সরাসরি ক্লাস প্রোপার্টি হিসেবে ঘোষণা করতে পারেন, যা কোড আরও ছোট এবং পরিষ্কার করে তোলে।
- পুনঃব্যবহারযোগ্যতা: কনস্ট্রাক্টর প্যারামিটারগুলির মাধ্যমে প্রোপার্টি ঘোষণা করার ফলে কোডের পুনঃব্যবহারযোগ্যতা বাড়ে, এবং একই কোডে ডেটা গঠন করা সহজ হয়।
- টাইপ ডিক্লারেশন: প্রোপার্টি প্রচার ব্যবহারের সময় টাইপ সঠিকতা বজায় রাখা যায় এবং এটি টাইপ ডিক্লারেশনের সুবিধা দেয়।
উপসংহার:
PHP 8 এর Property Promotion একটি শক্তিশালী ফিচার যা কোডের পরিচ্ছন্নতা এবং সংক্ষিপ্ততা বাড়ায়। এটি কনস্ট্রাক্টর প্যারামিটারগুলোকে ক্লাস প্রোপার্টি হিসেবে প্রচার করার মাধ্যমে কোড লেখার প্রক্রিয়া আরও সহজ করে তোলে।
Read more